#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#define N 50//宏定义每个小正方形的边长为50
#define n 8//宏定义每一个图案区块的格数

int width = 800;
int height = 800;//画布属性

void area1()
{
	setfillcolor(BLACK);//绘制小三角形阴影
	POINT pts[3] = { 0 };//坐标结构体数组初始坐标均为0

	pts[0].x = 0;
	pts[0].y = N;
	pts[1].x = N;
	pts[1].y = 0;
	pts[2].x = N;
	pts[2].y = N;//初始化坐标结构体数组存储此区域第一个三角形的顶点坐标
	int i, j;
	for (j = 0; j < 8; j++)//对列进行循环绘制
	{
		for (i = 0; i < n; i++)//对行进行循环绘制
		{
			solidpolygon(pts, 3);
			pts[0].x += N;
			pts[1].x += N;
			if (pts[1].x >= width / 2)
				pts[1].x = width / 2;//防止区域溢出
			pts[2].x += N;
			if (pts[2].x >= width / 2)//防止区域溢出
				pts[2].x = width / 2;

		}
		pts[0].x = 0;
		pts[1].x = N;
		pts[2].x = N;
		pts[0].y += N;
		pts[1].y += N;
		pts[2].y += N;//每行绘制结束后调整参数，行从头开始，列加一

	}

}


void area2()
{
	setfillcolor(BLACK);//绘制小三角形阴影
	POINT pts[3] = { 0 };//坐标结构体数组初始坐标均为0

	pts[0].x = width / 2;
	pts[0].y = 0;
	pts[1].x = width / 2 + N;
	pts[1].y = 0;
	pts[2].x = width / 2 + N;
	pts[2].y = N;//初始化坐标结构体数组存储此区域第一个三角形的顶点坐标
	int i, j;
	for (j = 0; j < 8; j++)//对列进行循环绘制
	{
		for (i = 0; i < n; i++)//对行进行循环绘制
		{
			solidpolygon(pts, 3);
			pts[0].x += N;
			pts[1].x += N;
			if (pts[1].x >= width)
				pts[1].x = width;//防止区域溢出
			pts[2].x += N;
			if (pts[2].x >= width)//防止区域溢出
				pts[2].x = width;

		}
		pts[0].x = width / 2;
		pts[1].x = width / 2 + N;
		pts[2].x = width / 2 + N;
		pts[0].y += N;
		pts[1].y += N;
		pts[2].y += N;//每行绘制结束后调整参数，行从头开始，列加一

	}

}



void area3()
{
	setfillcolor(BLACK);//绘制小三角形阴影
	POINT pts[3] = { 0 };//坐标结构体数组初始坐标均为0

	pts[0].x = 0;
	pts[0].y = height / 2;
	pts[1].x = 0;
	pts[1].y = height / 2 + N;
	pts[2].x = N;
	pts[2].y = height / 2 + N;//初始化坐标结构体数组存储此区域第一个三角形的顶点坐标
	int i, j;
	for (j = 0; j < 8; j++)//对列进行循环绘制
	{
		for (i = 0; i < n; i++)//对行进行循环绘制
		{
			solidpolygon(pts, 3);
			pts[0].x += N;
			pts[1].x += N;
			pts[2].x += N;
			if (pts[2].x >= width / 2)//防止区域溢出
				pts[2].x = width / 2;

		}
		pts[0].x = 0;
		pts[1].x = 0;
		pts[2].x = N;
		pts[0].y += N;
		pts[1].y += N;
		pts[2].y += N;//每行绘制结束后调整参数，行从头开始，列加一

	}

}





void area4()
{
	setfillcolor(BLACK);//绘制小三角形阴影
	POINT pts[3] = { 0 };//坐标结构体数组初始坐标均为0

	pts[0].x = width / 2;
	pts[0].y = height / 2;
	pts[1].x = width / 2 + N;
	pts[1].y = height / 2;
	pts[2].x = width / 2;
	pts[2].y = height / 2 + N;//初始化坐标结构体数组存储此区域第一个三角形的顶点坐标
	int i, j;
	for (j = 0; j < 8; j++)//对列进行循环绘制
	{
		for (i = 0; i < n; i++)//对行进行循环绘制
		{
			solidpolygon(pts, 3);
			pts[0].x += N;
			pts[1].x += N;
			if (pts[1].x >= width)
				pts[1].x = width;//防止区域溢出
			pts[2].x += N;
		}
		pts[0].x = width / 2;
		pts[1].x = width / 2 + N;
		pts[2].x = width / 2;
		pts[0].y += N;
		pts[1].y += N;
		pts[2].y += N;//每行绘制结束后调整参数，行从头开始，列加一

	}

}

int main()
{

	initgraph(width, height);//新开画布
	setbkcolor(WHITE);
	cleardevice();//白色背景刷新画布

	area1();//第一区域绘制函数

	area2();//第二区域绘制函数
	
	area3();//第三区域绘制函数

	area4();//第四区域绘制函数
	

	_getch();
	closegraph();//关闭画布
	return 0;
}